package com.aabbc.user.controller;

import com.aabbc.user.entity.UserInfo;
import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

/**
 * TestController
 *
 * @author: <a href="mailto:chenfenghai@oristartech.com">chenfenghai</a>
 * @version: 1.0
 * @date: 2019-11-07 16:39
 */
@RestController
public class DemoController {

    /**
     ** 创建线程安全的Map，用作数据存储
     */
    private static Map<Long, UserInfo> users = new ConcurrentHashMap<>();

    /**
     * 查询用户列表
     * @return
     */
    @GetMapping("/")
    public List<UserInfo> getUserList() {
        return new ArrayList<>(users.values());
    }

    /**
     * 创建User
     * @param userInfo
     * @return
     */
    @PostMapping("/")
    public UserInfo postUser(@ModelAttribute UserInfo userInfo) {
        users.put(userInfo.getId(), userInfo);
        return users.get(userInfo.getId());
    }

    /**
     * {id} 根据 url 中的 id 获取 user 信息
     * url中的id可通过@PathVariable绑定到函数的参数中
     * @param id
     * @return
     */
    @GetMapping("/{id}")
    public UserInfo getUser(@PathVariable Long id) {
        return users.get(id);
    }

    /**
     * 根据 id 更新用户信息
     * @param id
     * @param userInfo
     * @return
     */
    @PutMapping("/{id}")
    public UserInfo putUser(@PathVariable Long id, @ModelAttribute UserInfo userInfo) {
        UserInfo u = users.get(id);
        u.setName(userInfo.getName());
        users.put(id, u);
        return users.get(userInfo.getId());
    }

    /**
     * 根据 id 删除用户信息
     * @param id
     * @return
     */
    @DeleteMapping("/{id}")
    public String deleteUser(@PathVariable Long id) {
        users.remove(id);
        return "success";
    }

}
